--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / js / browserLayoutStore.js
Displaying Raw • Download
meshchatx/src/frontend/js/browserLayoutStore.js db40ee7b0256e85be81753b7dcc9f7ee2c556e34 (db40ee7b) Text, 2.61 KB
Tff7b72const Te6edf3NOMAD_TABS_KEY Tff7b72= Ta5d6ff"meshchatx.nomadnet.tabs"Tb4b4b4;
Tff7b72const Te6edf3MESSAGE_PANES_KEY Tff7b72= Ta5d6ff"meshchatx.messages.panes"Tb4b4b4;
Tff7b72const Te6edf3RNSH_LAYOUT_KEY Tff7b72= Ta5d6ff"meshchatx.rnsh.layout"Tb4b4b4;
T8b949e/**
* Safely read and parse a JSON value from localStorage.
*
* @param {string} key storage key
* @returns {*} parsed value, or null when missing or unreadable
*/
Tff7b72function Te6edf3readJsonTb4b4b4(Te6edf3keyTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Tffa657window Tff7b72=== Ta5d6ff"undefined" Tff7b72|| Tff7b72!Tffa657windowTb4b4b4.Te6edf3localStorageTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3raw Tff7b72= Tffa657windowTb4b4b4.Te6edf3localStorageTb4b4b4.Te6edf3getItemTb4b4b4(Te6edf3keyTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3rawTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* Safely serialise and store a JSON value in localStorage.
*
* @param {string} key storage key
* @param {*} value value to persist
*/
Tff7b72function Te6edf3writeJsonTb4b4b4(Te6edf3keyTb4b4b4, Te6edf3valueTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72typeof Tffa657window Tff7b72=== Ta5d6ff"undefined" Tff7b72|| Tff7b72!Tffa657windowTb4b4b4.Te6edf3localStorageTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tffa657windowTb4b4b4.Te6edf3localStorageTb4b4b4.Te6edf3setItemTb4b4b4(Te6edf3keyTb4b4b4, Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e// persistence is best-effort; ignore quota or availability errors
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* Load the persisted NomadNet browser tab layout.
*
* @returns {{tabs: Array, activeIndex: number}|null} saved layout or null
*/
Tff7b72export Tff7b72function Te6edf3loadNomadTabsTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3data Tff7b72= Te6edf3readJsonTb4b4b4(Te6edf3NOMAD_TABS_KEYTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3data Tff7b72|| Tff7b72!Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3dataTb4b4b4.Te6edf3tabsTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3dataTb4b4b4;
Tb4b4b4}
T8b949e/**
* Persist the NomadNet browser tab layout.
*
* @param {{tabs: Array, activeIndex: number}} state layout to save
*/
Tff7b72export Tff7b72function Te6edf3saveNomadTabsTb4b4b4(Te6edf3stateTb4b4b4) Tb4b4b4{
Te6edf3writeJsonTb4b4b4(Te6edf3NOMAD_TABS_KEYTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Load the persisted Messages pane layout.
*
* @returns {{panes: Array, focusedIndex: number}|null} saved layout or null
*/
Tff7b72export Tff7b72function Te6edf3loadMessagePanesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3data Tff7b72= Te6edf3readJsonTb4b4b4(Te6edf3MESSAGE_PANES_KEYTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3data Tff7b72|| Tff7b72!Tffa657ArrayTb4b4b4.Te6edf3isArrayTb4b4b4(Te6edf3dataTb4b4b4.Te6edf3panesTb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3dataTb4b4b4;
Tb4b4b4}
T8b949e/**
* Persist the Messages pane layout.
*
* @param {{panes: Array, focusedIndex: number}} state layout to save
*/
Tff7b72export Tff7b72function Te6edf3saveMessagePanesTb4b4b4(Te6edf3stateTb4b4b4) Tb4b4b4{
Te6edf3writeJsonTb4b4b4(Te6edf3MESSAGE_PANES_KEYTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* Load persisted RNSH manager UI layout.
*
* @returns {{selectedSessionId: string|null}|null} saved layout or null
*/
Tff7b72export Tff7b72function Te6edf3loadRnshLayoutTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3data Tff7b72= Te6edf3readJsonTb4b4b4(Te6edf3RNSH_LAYOUT_KEYTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3data Tff7b72|| Tff7b72typeof Te6edf3data Tff7b72!== Ta5d6ff"object"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3dataTb4b4b4;
Tb4b4b4}
T8b949e/**
* Persist RNSH manager UI layout.
*
* @param {{selectedSessionId: string|null}} state layout to save
*/
Tff7b72export Tff7b72function Te6edf3saveRnshLayoutTb4b4b4(Te6edf3stateTb4b4b4) Tb4b4b4{
Te6edf3writeJsonTb4b4b4(Te6edf3RNSH_LAYOUT_KEYTb4b4b4, Te6edf3stateTb4b4b4)Tb4b4b4;
Tb4b4b4}
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────